bitkeeper revision 1.1159.1.397 (4190c242En4S9vFQxE-5236TUXMRkA)
authorcl349@freefall.cl.cam.ac.uk <cl349@freefall.cl.cam.ac.uk>
Tue, 9 Nov 2004 13:12:34 +0000 (13:12 +0000)
committercl349@freefall.cl.cam.ac.uk <cl349@freefall.cl.cam.ac.uk>
Tue, 9 Nov 2004 13:12:34 +0000 (13:12 +0000)
Cleanup pagetables for all exec_domains.

xen/arch/x86/domain.c

index 331a1bd4ce680b08f7154337b767427f92e4e335..822ab13a4557c8b8f57e2016bd09ddfe12ac5235 100644 (file)
@@ -529,6 +529,8 @@ static void relinquish_list(struct domain *d, struct list_head *list)
 
 void domain_relinquish_memory(struct domain *d)
 {
+    struct exec_domain *ed;
+
     audit_domain(d);
 
     /* Ensure that noone is running over the dead domain's page tables. */
@@ -538,9 +540,11 @@ void domain_relinquish_memory(struct domain *d)
     shadow_mode_disable(d);
 
     /* Drop the in-use reference to the page-table base. */
-    if ( pagetable_val(d->exec_domain[0]->mm.pagetable) != 0 )
-        put_page_and_type(&frame_table[pagetable_val(d->exec_domain[0]->mm.pagetable) >>
-                                      PAGE_SHIFT]);
+    for_each_exec_domain(d, ed) {
+        if ( pagetable_val(ed->mm.pagetable) != 0 )
+            put_page_and_type(&frame_table[pagetable_val(ed->mm.pagetable) >>
+                                           PAGE_SHIFT]);
+    }
 
     /*
      * Relinquish GDT mappings. No need for explicit unmapping of the LDT as